Python
파이썬기초_02_제너레이터와 이터레이터
작성자 : Heehyeon Yoo|2025-12-15
# Python# Generator# Iterator# yield
1. 이터러블(Iterable)과 이터레이터(Iterator)
- 이터러블 (Iterable): 반복 가능한 객체. (예:
list,str,tuple)for문에 넣을 수 있는 것들.
- 이터레이터 (Iterator):
next()함수를 호출할 때마다 다음 값을 하나씩 내뱉는 객체.- 메모리에 모든 값을 올려두지 않고, 필요할 때마다 하나씩 생성(Lazy Evaluation)함.
2. 제너레이터 (Generator)
이터레이터를 생성하는 가장 쉬운 방법. 함수 안에 return 대신 **yield**를 사용하면 제너레이터가 된다.
일반 함수 vs 제너레이터
- 일반 함수: 호출되면
return을 만날 때까지 쭉 실행되고 종료됨. - 제너레이터:
yield를 만나면 값을 던져주고(양보하고) 잠시 멈춤. 다시 호출(next())되면 멈춘 곳에서부터 이어서 실행됨.
def my_gen():
yield 1
yield 2
yield 3
g = my_gen()
print(next(g)) # 1
print(next(g)) # 2
3. 왜 쓰는가? (메모리 효율)
100만 개의 숫자 리스트를 만든다고 가정하자.
- 리스트(List): 100만 개 숫자를 전부 메모리에 미리 만들어 올림. (메모리 폭발)
- 제너레이터(Generator): "다음 숫자 내놔" 할 때만 숫자 하나를 만들어서 줌. (메모리 거의 안 씀)
# 리스트 컴프리헨션 (메모리 많이 씀)
my_list = [i for i in range(1000000)]
# 제너레이터 표현식 (메모리 아낌) - 소괄호 사용
my_gen = (i for i in range(1000000))